{ Модуль, описывающий некоторые виды гравитации }
unit grav;

interface

uses
  phys;

type
  // Гравитация планеты
  TGravPlanet = class(TGravitation)
    // Ускорение свободного падения планеты
    FAcc: TVec2f;
    // Флаг All определяет нужно ли воздействовать на все тела или только те,
    // которые не на полу
    FAll: Boolean;
    constructor Create(const Acc: TVec2f; All: Boolean);
    function IsEffectOnBody(Body: TBody): Boolean; override;
    function GetValue(Body: TBody): TVec2f; override;
  end;
  
  // Можно описать другие виды гравитации:
  //    Сила Архимеда
  //    Притяжение к магниту
  //    Взаимодействие между телами, зависящее от расстояния

implementation

constructor TGravPlanet.Create(const Acc: TVec2f; All: Boolean);
begin
  FAcc := Acc;
  FAll := All;
end;

function TGravPlanet.IsEffectOnBody(Body: TBody): Boolean;
begin
  Result := FAll or Body.OnGround;
end;

function TGravPlanet.GetValue(Body: TBody): TVec2f;
begin
  Result := FAcc;
end;

// TEST FROM DEBIAN

end.

